﻿(function ($) {
    window.fs = {};

    //生成guid
    /*	var NewGuid = function () {
		var s4 = function () { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); };
		return (s4() + s4() + "" + s4() + "" + s4() + "" + s4() + "" + s4() + s4() + s4()).toUpperCase();
	};*/

    //遮罩层
    var Maskwin = function () {
        this.show = function (msg) {
            /*var h = $(document).height();*/
            this.maskmsg = $('<div style="height:100%;width:100%;position:fixed;z-index:99999;left:0px;top:0px;"><div title="" style="position:absolute;left:50%;top:45%;margin-left:-62px;margin-top:-62px;overflow:hidden;color:white;"><div class="loading-message loading-message-boxed"><img src="/Content/Areas/images/loading-spinner-blue.gif" align=""><span>&nbsp;加载中...</span></div></div></div>');
            if (msg) {
                this.maskmsg.find("span").text(msg);
            }
            this.maskmsg.appendTo("body");
        };
        this.hide = function () {
            this.maskmsg.remove();
        };
    };

    ///获取时间戳
    /*var getTimeStamp = function (jsondate) {
		if (!jsondate) {
			return "";
		}
		jsondate = jsondate + "";
		if (!/^\/Date[(].+[)]\/$/.test(jsondate)) return jsondate.replace("T", " ");
		jsondate = jsondate.replace("/Date(", "").replace(")/", "");
		if (jsondate.indexOf("+") > 0) {
			jsondate = jsondate.substring(0, jsondate.indexOf("+"));
		}
		else if (jsondate.indexOf("-") > 0) {
			jsondate = jsondate.substring(0, jsondate.indexOf("-"));
		}
		return jsondate;
	};*/

    /**
 * 
 * 对参数进行URL编码
 * 
 * @method zip
 * @for FuncDomain
 * @author [杨瑜堃]
 * @version 1.0.1
 * @param {json} jsonObj 要编码的对象
 * @returns {string} 编码结果
 */
    function zip(jsonObj) {
        if (!jsonObj) return jsonObj;
        if (jsonObj instanceof String) {
            return encodeURIComponent(jsonObj);
        } else {
            return encodeURIComponent(JSON.stringify(jsonObj));
        }
    }

    //解压decodeURIComponent
    var unzip = function (jsonStr) {
        if (!jsonStr) return jsonStr;
        return eval("(" + decodeURIComponent(jsonStr) + ")");
    };

    /* 
	 * jQuery        Ajax调用封装
	 * url:			调用地址
	 * data:			可选参数,表示Ajax调用参数
	 * onSuccess:	可选参数,成功回调函数,函数签名为  function(data), data参数为调用结果
	 * onError:		可选参数,失败回调函数,函数签名为  function (XMLHttpRequest, textStatus, errorThrown)
	 * modal:		可选参数,是否作为模态对话框显示，默认为true
	 * datatype:		可选参数,Ajax返回数据类型,默认为 "json"
	 * cache:		可选参数,Ajax调用是否启用缓存,默认为 false
	 * onComplete:	可选参数,Ajax调用完成回调函数,函数签名为  function (XMLHttpRequest, textStatus)
	 * async:		可选参数,是否异步调用，默认为true
	 */
    fs.AjaxPost = function (param) {
        var mask = null;
        param.modal = (param.modal === false ? false : true);
        if (param.modal) {
            mask = new Maskwin();
            mask.show();
        }
        var ajaxHandler =
			$.ajax({
			    url: param.url,
			    data: zip(param.data),
			    type: "post",
			    dataType: param.datatype ? param.datatype : "json",
			    //contentType:"application/json;charset=utf-8",   
			    contentType: "application/x-www-form-urlencoded",
			    cache: param.cache ? param.cache : false,
			    async: (param.async == null || param.async == undefined) ? true : param.async,
			    success: function (json) {
			        if (mask) {
			            mask.hide();
			        }
			        var result = json || null;
			        try {
			            result.Data = JSON.parse(result.Data || null);
			        } catch (e) {

			        }
			        param.success(result);
			        if (!result.Success) {
                        fs.PopUpWindow.alerts(result.Msg, "warning");
			        }
			    },
			    error: function (XMLHttpRequest, textStatus, errorThrown) {//统一的错误信息处理
			        var error = JSON.parse(XMLHttpRequest.responseText);
			        if (param.onError != null) {
			            param.onError(XMLHttpRequest, textStatus, errorThrown, error);
			        }
                    fs.PopUpWindow.alerts(error.ErrorMessage, "error");
			    },
			    complete: function (XMLHttpRequest, status) {

			        //请求完成后最终执行参数
			        if (status == 'timeout') {
			            //超时,status还有success,error等值的情况
			            fs.PopUpWindow.alerts("访问超时!", "error");
			            this.ajaxHandler.abort();
			            mask.hide();
			        }
			    },
			    statusCode: {
			        500: function () {
			            fs.PopUpWindow.alerts("操作错误!", "error");
			        }
			    }
			});
    };

    //pageIndex 分页索引，以1开始
    //pageSize  分页大小
    fs.BasePage = {
        pageIndex: 1,
        pageSize: 20,
        sortName: 'ID',
        sortOrder: 'desc'
    };

    fs.SelectedRow = {

        /*
         *确认是否对的选中行进行操作（单行）
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   callBackFuc：确认要操作的回调函数
         *   confirmMessage：确认提示框显示的确定信息
         *   unSelectRowMessage：未选中行的提示信息
         */
        ConfirmExcuteSelectedRow: function (dataGridId, callBackFuc, confirmMessage, unSelectRowMessage) {
            try {
                var selectedRow = $("#" + dataGridId).datagrid("getSelected");
                if (selectedRow !== null) {
                    $.messager.confirm('确认', confirmMessage, function (r) {
                        if (r) {
                            callBackFuc(selectedRow);
                        }
                    });
                } else {
                    fs.PopUpWindow.alerts(unSelectRowMessage, "warning");
                }
            } catch (e) {
                fs.PopUpWindow.alerts("抱歉，脚本出现错误，错误信息：" + e.message, "warning");
            }
        },

        /*
         *确认是否对的选中行进行操作（多行）
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   callBackFuc：确认要操作的回调函数
         *   confirmMessage：确认提示框显示的确定信息
         *   unSelectRowMessage：未选中行的提示信息
         */
        ConfirmExcuteSelectedRows: function (dataGridId, callBackFuc, confirmMessage, unSelectRowMessage) {
            try {
                var selectedRow = $("#" + dataGridId).datagrid("getChecked");
                if (selectedRow !== null && selectedRow !== undefined && selectedRow.length > 0) {
                    $.messager.confirm('确认', confirmMessage, function (r) {
                        if (r) {
                            callBackFuc(selectedRow);
                        }
                    });
                } else {
                    fs.PopUpWindow.alerts(unSelectRowMessage, "warning");
                }
            } catch (e) {
                fs.PopUpWindow.alerts("抱歉，脚本出现错误，错误信息：" + e.message, "warning");
            }
        },

        /*
         *检查datagrid是否有选中行（单行）
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   callBackFuc：确认要操作的回调函数
         *   unSelectRowMessage：未选中行的提示信息
         */
        CheckeExcuteSelectedRow: function (dataGridId, callBackFuc, unSelectRowMessage) {
            try {
                var selectedRow = $("#" + dataGridId).datagrid("getSelected");
                if (selectedRow !== null) {
                    callBackFuc(selectedRow);
                } else {
                    fs.PopUpWindow.alerts(unSelectRowMessage, "warning");
                }
            } catch (e) {
                fs.PopUpWindow.alerts("抱歉，脚本出现错误，错误信息：" + e.message, "warning");
            }
        },

        /*
         *检查datagrid是否有选中行（多选行）
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   callBackFuc：确认要操作的回调函数
         *   unSelectRowMessage：未选中行的提示信息
         */
        CheckeExcuteSelectedRows: function (dataGridId, callBackFuc, unSelectRowMessage) {
            try {
                var selectedRow = $("#" + dataGridId).datagrid("getChecked");
                if (selectedRow !== null && selectedRow.length > 0) {
                    callBackFuc(selectedRow);
                } else {
                    fs.PopUpWindow.alerts(unSelectRowMessage, "warning");
                }
            } catch (e) {
                fs.PopUpWindow.alerts("抱歉，脚本出现错误，错误信息：" + e.message, "warning");
            }
        }
    };

    ///分页封装
    fs.PagingBind = {
        /*
         *绑定分页对象
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   fnName：确认要操作的回调函数
         *   parms：参数
         *   isSelected 如果没有选中，全部不选中
         */
        gdPagerBind: function (gridview, fnName, basePage, parms, isSelected) {
            getPager = gridview.datagrid('getPager');
            getPager.pagination({
                pageList: [20, 30, 40, 50],
                pageNumber: 1,
                pageSize: 2,
                beforePageText: '第', //页数文本框前显示的汉字  
                afterPageText: '页    共 {pages} 页',
                displayMsg: '共 {total} 条记录',
                onSelectPage: function (pageNumber, pageSize) {
                    if (fnName) {
                        if (pageNumber < 1) {
                            pageNumber = 1;
                        }
                        basePage.pageIndex = pageNumber;
                        basePage.pageSize = pageSize;
                        eval(fnName + "(" + basePage + "," + JSON.stringify(parms) + ")");
                        if (!isSelected) {
                            gridview.datagrid('unselectAll');
                        }
                    }
                }
            });
            return getPager;
        },

        /*
         *绑定分页对象
         *
         *参数
         *   dataGridId:datagrid的标签ID，不要带#号
         *   fnName：确认要操作的回调函数
         *   pageSizes 每一页行数
         *   parms：参数
         *   isSelected 如果没有选中，全部不选中
         */
        gdPagerBinds: function (gridview, fnName, pageSizes, parms, isSelected) {
            getPager = gridview.datagrid('getPager');
            getPager.pagination({
                pageList: [10, 20, 30, 40, 50, 100],
                pageNumber: 1,
                pageSize: pageSizes,
                beforePageText: '第', //页数文本框前显示的汉字  
                afterPageText: '页    共 {pages} 页',
                displayMsg: '共 {total} 条记录',
                onSelectPage: function (pageNumber, pageSize) {
                    if (fnName) {
                        if (pageNumber < 1) {
                            pageNumber = 1;
                        }
                        eval(fnName + "(" + pageNumber + "," + pageSize + "," + JSON.stringify(parms) + ")");
                        if (!isSelected) {
                            gridview.datagrid('unselectAll');
                        }
                    }
                }
            });
            return getPager;
        }

    };

    ///弹框
    fs.PopUpWindow = {
        //title：在头部面板显示的标题文本。
        //msg：显示的消息文本。
        //icon：显示的图标图像。可用值有：error,question,info,warning。
        //fn: 在窗口关闭的时候触发该回调函数。 
        //代码示例：
        alerts: function (msg, icon, fn) {
            if (fn) {
                if (icon) {
                    $.messager.alert("提示", msg, icon, fn);
                } else {
                    $.messager.alert("提示", msg, "info", fn);
                }
            } else {
                if (icon) {
                    $.messager.alert("提示", msg, icon);
                } else {
                    $.messager.alert("提示", msg);
                }
            }
        }
    };
})(jQuery);







